﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using vudu.ClasesDominio;
using vudu.Logica.Clases;
using vudu.Datos.SqlServer;

namespace vudu.Pruebas
{
    [TestFixture]
    public class PruebaEnlaceDeDatosEvaluacion
    {
        [Test]
        public void InsertarEvaluacion()
        {
            //Creo el objeto de tipo evaluacion, con la informacion de la misma...
            Evaluacion evaluacion = new Evaluacion("Parcial 1","Examen",10,new DateTime(2011,10,1),1);
            SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
            //Inserto la evaluacion y obtengo el id insertado.
            int respuesta = sqlServerEvaluacion.InsertarEvaluacion(evaluacion);
            evaluacion.IdEvaluacion = respuesta;
            //Comparo si la funcion de insertar no entro en el catch, pq la respues es != de -1
            Assert.IsTrue(respuesta != -1);
            //Consulto la evaluacion insertada en base de datos.
            Evaluacion evaluacionEnBd = sqlServerEvaluacion.ConsultarEvaluacion(respuesta);
            //Comparo la evaluacion original con la insertada en base de datos
            Assert.IsTrue(evaluacion.Equals(evaluacionEnBd));
        }

        [Test]
        public void ConsultarEvaluacion()
        {
            SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
            Evaluacion evaluacion = new Evaluacion();
            //Consulto la evaluacion y guardo la evaluacion consultada en el objeto evaluacion
            evaluacion = sqlServerEvaluacion.ConsultarEvaluacion(4);
            //Reviso si este objeto no es nulo para saber si consulto en base de datos.
            Assert.IsNotNull(evaluacion);
        }

        [Test]
        public void EliminarEvaluacion()
        {
            Evaluacion evaluacion = new Evaluacion();
            evaluacion.IdEvaluacion = 9;
            SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
            //Primero elimino y reviso si la respuesta es (TRUE).
            Assert.IsTrue(sqlServerEvaluacion.EliminarEvaluacion(evaluacion));
            //Para comprobar que elimino consulto la evaluacion con el id eliminado.
            Assert.AreEqual(0,sqlServerEvaluacion.ConsultarEvaluacion(9).IdEvaluacion);
        }

        [Test]
        public void ModificarEvaluacion()
        {
            SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
            //Primero consulto una evaluacion en base de dato
            Evaluacion evaluacion = sqlServerEvaluacion.ConsultarEvaluacion(2);
            //Modifico esta evaluacion
            evaluacion.TipoEvaluacion = "Quiz";
            evaluacion.Nombre = "Examen #2";
            evaluacion.Porcentaje = 20;
            evaluacion.FechaEvaluacion = new DateTime(2012,1,1);
            evaluacion.FkIdSeccion = 1;
            //Confirmo que el metodo modificar no haya entrado en ningun excepcion
            Assert.IsTrue(sqlServerEvaluacion.ModificarEvaluacion(evaluacion));
            //Consulto en base de datos nuevamente el registro
            Evaluacion evaluacionModificado = sqlServerEvaluacion.ConsultarEvaluacion(2);
            //Comparo si es igual el de base de datos con el modificado aqui.
            Assert.IsTrue(evaluacion.Equals(evaluacionModificado));
        }

        [Test]
        public void ConsultarEsquemasDeEvaluacionProfesor()
        {
            SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
            Profesor profesor = new Profesor();
            profesor.Cedula = 18011724;
            List<SeccionMateria> misEsquemasEvaluacion =
                sqlServerEvaluacion.ConsultarEsquemasDeEvaluacionProfesor(profesor);
            Assert.IsNotNull(misEsquemasEvaluacion);

        }

        [Test]
        public void ConsultarEsquemaDeEvaluacionSeccion()
        {
            SqlServerEvaluacion sqlServerEvaluacion = new SqlServerEvaluacion();
            
            SeccionMateria seccionMateria = new SeccionMateria();
            seccionMateria.Profesor.Cedula = 18011724;
            seccionMateria.IdSeccionMateria = 1;
            
            List<Evaluacion> misEsquemasEvaluacion =
                sqlServerEvaluacion.ConsultarEsquemaEvaluacionSeccion(seccionMateria);
            Assert.IsNotNull(misEsquemasEvaluacion);

            Assert.AreEqual(misEsquemasEvaluacion.ElementAt(0).Nombre, "Parcial 1");
            Assert.AreEqual(misEsquemasEvaluacion.ElementAt(1).Nombre, "Parcial 2");
            Assert.AreEqual(misEsquemasEvaluacion.ElementAt(2).Nombre, "Proyecto");

        }
    }
}